package br.com.app;

import java.util.ArrayList;
import java.util.List;

public class Media {

	private double[] pesos;
	private double[] notas;
	private double media;

	public Media(double[] notas) {
		this.notas = notas;
		this.media = 0;
	}

	private double[] getPesos(String curso) {
		if (curso.equals(CursosRecife.ADMINISTRACAO)) {
			return CursosRecife.ADMINISTRACAO_PESOS;
		}
		if (curso.equals(CursosRecife.ARQUEOLOGIA)) {
			return CursosRecife.ARQUEOLOGIA_PESOS;
		}

		if (curso.equals(CursosRecife.ARTES_VISUAIS_LICENCIATURA)) {
			return CursosRecife.ARTES_VISUAIS_LICENCIATURA_PESOS;
		}
		if (curso.equals(CursosRecife.BIBLIOTECONOMIA)) {
			return CursosRecife.BIBLIOTECONOMIA_PESOS;
		}
		if (curso.equals(CursosRecife.BIOMEDICINA)) {
			return CursosRecife.BIOMEDICINA_PESOS;
		}
		if (curso.equals(CursosRecife.CIENCIAS_ATUARIAIS)) {
			return CursosRecife.CIENCIAS_ATUARIAIS_PESOS;
		}
		if (curso.equals(CursosRecife.CIENCIAS_BIOLOGICAS_BACHARELADO)) {
			return CursosRecife.CIENCIAS_BIOLOGICAS_BACHARELADO_PESOS;
		}
		if (curso.equals(CursosRecife.CIENCIAS_CONTABEIS)) {
			return CursosRecife.CIENCIAS_CONTABEIS_PESOS;
		}
		if (curso.equals(CursosRecife.CIENCIA_DA_COMPUTACAO)) {
			return CursosRecife.CIENCIA_DA_COMPUTACAO_PESOS;
		}
		if (curso.equals(CursosRecife.CIENCIAS_ECONOMICAS)) {
			return CursosRecife.CIENCIAS_ECONOMICAS_PESOS;
		}
		if (curso.equals(CursosRecife.CIENCIA_POLITICA)) {
			return CursosRecife.CIENCIA_POLITICA_PESOS;
		}
		if (curso.equals(CursosRecife.CIENCIAS_SOCIAIS_BACHARELADO)) {
			return CursosRecife.CIENCIAS_SOCIAIS_BACHARELADO_PESOS;
		}
		if (curso.equals(CursosRecife.CIENCIAS_SOCIAIS_LICENCIATURA)) {
			return CursosRecife.CIENCIAS_SOCIAIS_LICENCIATURA_PESOS;
		}
		if (curso.equals(CursosRecife.DESIGN)) {
			return CursosRecife.DESIGN_PESOS;
		}
		
		if (curso.equals(CursosRecife.SISTEMAS_DE_INFORMACAO)) {
			return CursosRecife.SISTEMAS_DE_INFORMACAO_PESOS;
		}
		return null;
	}

	public String getMedia(String curso) {
		media = 0;
		pesos = getPesos(curso);
		for (int i = 0; i < 5; i++) {
			media += notas[i] * pesos[i];
		}
		media = media / 10.0;

		String aux = String.valueOf(media);

		if (aux.length() > 5) {
			return aux.substring(0, 6);
		}

		return aux;
	}

	public List<String> getCursosMaiorNota(List<String> nomes_cursos) {
		List<String> retorno = new ArrayList<String>();
		double maiorMedia = 0;
		double aux;
		for (String s : nomes_cursos) {
			aux = Double.parseDouble(getMedia(s));
			if (aux > maiorMedia) {
				maiorMedia = aux;
			}
		}
		for (String s : nomes_cursos) {
			aux = Double.parseDouble(getMedia(s));
			if (aux >= maiorMedia) {
				retorno.add(s);
			}
		}

		return retorno;
	}

	public List<String> getCursosMenorNota(List<String> nomes_cursos) {
		List<String> retorno = new ArrayList<String>();
		double menorMedia = 1000;
		double aux;
		for (String s : nomes_cursos) {
			aux = Double.parseDouble(getMedia(s));
			if (aux < menorMedia) {
				menorMedia = aux;
			}
		}
		for (String s : nomes_cursos) {
			aux = Double.parseDouble(getMedia(s));
			if (aux <= menorMedia) {
				retorno.add(s);
			}
		}

		return retorno;
	}

}